package Iterator;

import java.io.StringReader;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.function.BinaryOperator;
import java.util.stream.Collectors;
import java.util.stream.DoubleStream;
import java.util.stream.Stream;

/**
 * @Grup:Iterator
 * @Auther:cola
 * @Data:2021/3/28-2021-03-13:23
 * @version:1.0
 * Sream接口:不是存储的数据结构,数据源可以是一个集合,为了函数式编程创造,
 * 惰式执行,数据只能被消费一次
 *
 *
 * 俩种类型的操作方法:
 * 1.中间操作(生成一个Stream)
 * 2.结束操作(执行计算操作)
 */
public class StreamDemo {
    public static void main(String[] args) {
        Stream<String>stream= Stream.of("good1","good");
        //foreach方法
        //stream.forEach((str)-> System.out.println(str));

        //filter方法
        //stream.filter((s)->s.length()>3).forEach(System.out::println);

        //distinct
        //stream.distinct().forEach(s->System.out.println(s));

        //map方法
        //stream.map(s->s.toUpperCase()).forEach(s-> System.out.println(s));

        //flatMap
        /*Stream<List<Integer>> ss=Stream.of(Arrays.asList(1,2,3),Arrays.asList(4,5));
        ss.flatMap(list->list.stream()).forEach(System.out::println);*/

        //reduce
        /*Optional<String> opt=stream.reduce((s1, s2) ->s1.length()>=s2.length()?s1:s2);
        System.out.println(opt.get());*/

        //collect
        List<String>list=stream.collect(Collectors.toList());
        list.forEach(s-> System.out.println(s));

        /*::方法引用
        引用静态方法  Integer::valueOf
        引用对象的方法 list::add
        引用构造方法 ArrayList::new
        */


    }
}
